\chapter{Validação}

Uma das etapas mais importantes dos processos de desenvolvimento de software é aquela re\-ferente às atividades de Validação. A maioria dos processos modernos, inclusive XP1, indica que as atividades de teste devem ser executadas paralelamente a codificação do sistema, ou seja, existindo código já deve existir testes para o mesmo. Tal atitude garantirá que os testes do sistema possam evoluir conjuntamente com o crescimento do volume de código.

Pelo contexto do projeto estar baseado principalmente na utilização de fórmulas matemáticas e financeiras, buscou-se fundamentar bem os resultados através de uma bateria, grande em volume e em qualidade, de testes (testes de unidade e de aceitação). Para gerenciamento e utilização sistemática dessa bateria de testes fez-se uso de bibliotecas para execução automática dos mesmos. As bibliotecas utilizadas foram: PyUnit para testes de unidade e PyEasyAccept para testes de aceitação.

Outra preocupação constante durante a construção dos testes da aplicação foi com o nível de tolerância que os resultados obtidos poderiam divergir dos resultados apresentados pela HP-12C. Este foi um dos requisitos não funcionais planejados e, para cumprí-lo, fez-se uso em todos os testes de unidade de uma função especial para averiguar se os resultados dos testes estavam dentro da tolerância pré-estabelecida. Quanto aos testes de aceitação, também existiu a verificação se os resultados retornados estavam dentro da faixa desejada.

Para validação da aplicação, durante as reuniões quinzenais com o cliente do projeto e com o professor Adail Marcos, que leciona a disciplina de Matemática Financeira no curso de Administração da UFCG e que orientou a equipe em relação as fórmulas a serem empregadas, foi possível validar se questões como interface e novas funcionalidades estavam de acordo com as expectativas dos possíveis clientes do produto final.

Toda esta preocupação com testes, além de objetivar minimizar a quantidade de falhas do produto, tiveram por propósito atestar a qualidade do software, bem como permitir que a evolução do mesmo possa ser realizada sem maiores problemas.

Quanto a atividade de Verificação, esta conceitualmente está diretamente relacionada ao estabelecimento/identificação de corretude em parte de um determinado algoritmo, processo, protocolo, arquitetura, etc, para isso utilizando métodos formais de especificação e prova [conceito definido em discussão interna com o prof. Hyggo Almeida]. Visto isto, pela atividade de verificação tratar-se de um processo mais formal, e como o tempo para desenvolvimento do projeto foi reduzido, acabamos por não realizar esta atividade, considerando-a não adequada ao contexto do projeto em questão.

